package com.gragra.dependencyParsing;
/**
 * 
 */
import com.gragra.sampling.nonproj.MostFrequentFactory;
import com.gragra.sampling.nonproj.generators.CreateDependencyCorpus;
import com.gragra.sampling.nonproj.generators.nonprojective.singleroot.CreateGibbsGibbsSingleRootNonProj;
import com.gragra.sampling.nonproj.generators.nonprojective.singleroot.CreateGreedyRandomSingleRootNonProj;
import com.gragra.sampling.nonproj.generators.nonprojective.singleroot.CreateGreedySingleRootNonProj;
import com.gragra.sampling.nonproj.generators.nonprojective.singleroot.CreateMHMHSingleRootNonProjDepdTree;
import com.gragra.sampling.nonproj.generators.nonprojective.singleroot.CreateRandomWalkSingleRootNonProj;
import com.gragra.sampling.nonproj.generators.projective.singleroot.CreateGibbsMHSingleRootProjective;
import com.gragra.sampling.nonproj.generators.projective.singleroot.CreateGreedySingleRootProjective;
import com.gragra.sampling.nonproj.generators.projective.singleroot.CreateMHMHSingleRootProjective;
/**
 * 
 * @author Christoph Teichmann
 * 23.09.2013
 */
public enum SingleRootDependencyType implements DependencyStructureAccess
{
	MHMHProjective {
		@Override
		public CreateDependencyCorpus makeBaseCreator()
		{return new CreateMHMHSingleRootProjective(makeConverter());}
	},
	GibbsProjective{

		@Override
		public CreateDependencyCorpus makeBaseCreator()
		{return new CreateGibbsMHSingleRootProjective(this.makeConverter());}
	},
	GreedyProjective{
		@Override
		public CreateDependencyCorpus makeBaseCreator()
		{return new CreateGreedySingleRootProjective(this.makeConverter());}
	},
	MHMH {
		@Override
		public CreateDependencyCorpus makeBaseCreator()
		{return new CreateMHMHSingleRootNonProjDepdTree(makeConverter());}
	},
	GibbsGibbs{

		@Override
		public CreateDependencyCorpus makeBaseCreator()
		{return new CreateGibbsGibbsSingleRootNonProj(this.makeConverter());}
	},
	Greedy{
		@Override
		public CreateDependencyCorpus makeBaseCreator()
		{return new CreateGreedySingleRootNonProj(this.makeConverter());}
	},
	RandomWalk{
		@Override
		public CreateDependencyCorpus makeBaseCreator()
		{return new CreateRandomWalkSingleRootNonProj(this.makeConverter());}
	},
	GreedyRandomWalk
	{
		@Override
		public CreateDependencyCorpus makeBaseCreator()
		{return new CreateGreedyRandomSingleRootNonProj(this.makeConverter());}
	};
	/**
	 * @return
	 */
	protected MostFrequentFactory makeConverter()
	{return new MostFrequentFactory();}
}